30 编程马拉松

今天,我和你聊聊“编程马拉松 Hackathon”的故事。

Hackathon是一个合成词,取自Hack和Marathon,意为“编程马拉松”,又叫“黑客节”或“编程节”,它起源于Sun公司在1999年的 JavaOne 大会的一次活动。

在那次活动中,约翰·盖奇 (John Gage)向参会人员发出了一个挑战:用Java为新款的Palm V编写一个程序。这个程序可以让Palm V用户通过红外线端口和其他Palm V的用户通信,此外,Palm V用户还能够通过该程序在网上注册他们的手机。这个活动第一次引入了编程马拉松的概念,并沿用至今。

现在,湾区比较知名的创业公司都有个不成文的传统,通常一年会有几次编程马拉松,国内的一些互联网公司和技术社区也举办过类似的活动,就是有一周的三五天内,大家不工作而是去“Hack”一些自己感兴趣的小项目 。

编程马拉松期间,全公司理论上是不允许有任何工作相关的会议,所以你每天照常上班,但上班的内容是自己找一群小伙伴,大家一起做一个和工作不直接相关的项目,最后一天则展示自己的成果。

编程马拉松与平时工作的不同之处就在于,它让你去探索一些平时工作中无暇顾及的创意和想法,在很短的时间内推进和完成一个项目。

不只是说一说,而是去通过设计、交互和程序去展示你的想法。编程马拉松的另外一个好处是,可以让你在团队工作中和一些平时少有合作的同事建立很特殊的感情和纽带。

有一次编程马拉松接近尾声,我晚上开车回家,天色渐渐暗下来,看着路上忽亮忽暗的一排排车灯,以及路边不多的高楼上的广告牌灯光,听着一些略显过时的美国流行歌曲,突然间,以前 “Hacking”的一幕幕涌上了心头。很多老朋友、新朋友的笑容就清晰地闪现在我的眼前。

第一个故事:Hack的项目成了正式产品的原型

我第一次参加编程马拉松还是在Square,那时我加入Square Market组可能刚刚两三个月。Square Market组里有三个整天腻在一起的男生,关系特别好,一起吃饭,一起喝茶,晚上经常一起联网打游戏,周末也经常到一起玩纸牌。

他们三个有一个人是个在美国出生的华人,中文能听懂,但是说得不好,所以不太经常说。他早年在谷歌中国待过,是谷歌早期的牛人之一。另一个是香港人,来美国十几年了,普通话也不那么流利,但是前端后端都十分精通。

还有一个是个地地道道的美国人,但娶了个韩国妹子,所以会说一些韩文。他早年也是谷歌亚洲区的,系统层面的活儿做得特别熟。他们三个都自己创过业,Square的工作对他们来说也是得心应手。

我的第一次编程马拉松就是和他们三个一起完成的。为什么我能有幸和这亲密无间的三剑客一起做项目呢?

主要是因为Square的每个新人,都会有一个类似于“辅导员”的老员工带着新人熟悉系统和技术,而他们其中有一个人就是我的“辅导员”。

我是以应届毕业生的背景进入 Square 的,很多应用层面的技术都一窍不通,所以Rails、Search、JavaScript 等好多技术,都是我的“辅导员”手把手带我入门的。

大概是我一直比较刻苦的缘故,他们一直对我还是很友善的;虽然我很弱,他们三个做项目,还是把我也加进去了。

我的第一个编程马拉松项目,就是和他们三个一起用 Elastic Search 重写 Square Search 的后端。那一周我们四个在公司做什么都很自然地在一起,收获之一是我们的项目做得很好,后来Square Search后端的原型就是基于我们的编程马拉松的项目。

收获就是交了三个好朋友,后来在Square我和他们也走得近很多。甚至离开Square,他们还时不时地给我发消息,偶尔也来找我吃饭。

第二个故事:技术,不一定是在代码里

我经历的第二个编程马拉松还是在Square。当时我有个想法,就是做一个类似于公司内部的 eBay,大家可以卖、送和交换一些家里不再用的旧物品。和我同组的其他人都是妹子,因为对这个想法感兴趣的都是女生,其他人有做产品经理的,有做 HR 的,还有做设计的,只有我一个人是程序员。当时我对于 Square Market 已经很熟了,代码量也不多,所以写代码基本上我一个人就能搞定。

一个叫 M 的女生给我印象很深,她是那种你看她一眼,就会轻易联想到 Fashion 的风格。她的头发经常是不同的造型,口红也是每天不一样,都是各种极其鲜艳的色彩,衣服也是很独特的设计。总之,从上到下你都能看得出她精心而夸张的装饰,但是总体又给人非常和谐的感受,就像杂志里的模特一样。

她在这个项目里,是帮大家选定的商品拍照。这是个有难度又很繁琐的事情,可是她真的很厉害。这么说吧,同样一对耳环,我拍出来的效果可能是大家觉得白送都不要的地摊货,可她把背景、灯光、陪衬一搭配,那对耳环你说是 Tiffney 卖的都不为过,高大上立显,这可能真的需要对设计和审美有着很独特的眼光。

那段在一起 Hack 的日子里,让我对公司的非程序员的职位有了很大的改观,也更深刻地体会到,技术不一定是在可见的代码里,可能更多的是,让一些无形的产品增值。这个项目我也接触了很多非码工的妹子,交了几个很要好的女性朋友。

第三个故事:和大牛结对编程是怎样的一种体验

我经历的第三个编程马拉松就是在 Airbnb 了。与Square的一整周不一样,Airbnb的编程马拉松只有三天;而且这一次其实我本身没打算做什么,因为全公司都去 Hack 了,那周得有一个人负责运维,处理线上突发问题,或是协调一些产品代码的改动。那次正好轮到了我运维。

JM 知道我没有打算做什么,就拉着我一起,做了一个 Airbnb 内部的员工静态定位系统。简单来说,这个系统就是在公司的内部地图上可以定位到找到某个人座位在哪,公司大一点的时候,平时大家需要找一个人的时候经常问别人,但很多人都说不清。

说到这里,就需要交代一下JM 是谁?他是我当年在 Square 一起奋斗过的小伙伴,不过我们在工作上没有直接的交集。这个人在支付领域六七年之后,完全是个架构师级别的大牛了。

当初我拿了 Airbnb 的 Offer,第二天意外发现他恰好也同“轨迹”跳槽,离职入职的时间和我只差两个星期。这样,我们就是 Airbnb 唯二的前 Square 中国人,更恰好的是,我们都进了支付组。住得又很近,我和他因为这层特殊的关系,在 Airbnb 就格外亲密些。

JM读书的时候就参加过微软搞的编程竞赛,在世界排得上名次的,所以在简历上比我是高出不止一截。平时他也喜欢随大流称我一声“安姐”,和大家各种调侃玩笑,也从没给过我技术差距上的压力。

在简历上看见一个人牛,和在实际工作中体验一个人牛,是完全不同的感受。当时一起做办公室地图,我和他负责研究明白谷歌地图的一个 API 怎么用,怎么把办公室地图集成进去,以试用 API 提供的一些旋转,放大,移动等功能。

JM做了大部分的工作,我只帮忙写了程序,做了球面坐标和平面坐标的转换以及边界的转换等。我的工作量比他的少,而且总有人给我发信息协调运维相关的事,所以我很久才把函数写出来。他拉过我打草稿的纸,看了两眼,想了几秒,就说:“这里不对”,然后动手三下五除二就把我的代码改了。

本来我还觉得不太可能,结果证明人家就是把你一个隐藏很深的 Bug 给干掉了,这一点真的十分厉害。两个人一起写代码,如果水平差不多,会互有收益;但是如果水平差得太多了,基本看着那个会写的写,自己跟着学学就好了。

于是我就乐得清闲,坐在旁边看他敲敲代码,自己干干杂活,偶尔端个茶递个水剥个橘子。累的时候陪着聊个天,俨然一副“鼓励师”的架势。他也不介意,反正活都干了,干得挺麻利。所以我的第三个编程马拉松就这样轻松过关。

(在这里郑重申明的一点是:平时的工作中,我是非常认真的,这次马拉松是特殊情况,由于杂务缠身才稍显散漫,最后也贡献了一些技术代码。)

第四个故事:即使面对技术大牛,也可以表达意见

最近的一次编程马拉松,又是一个跟以往完全不一样的体验。这次一起做的是 J。J 不是我们支付组的,是 PI 组的,这个组是搭建和管理公司整体系统架构的一个组。

J在 Airbnb 是什么一个声望呢?除非你完全不碰系统,纯做前端或者移动,否则你列举的 Airbnb 牛人 J 必占其一。不管是系统设计审核,还是网站受攻击时的处理,还是正规化一些已有的软件,还是我司的开源等等,他都做得很好。

J完完全全走技术路线,和人员管理一点不搭边,因此他可以有更多的时间放在技术上。而且他很拼,真的很拼。几乎每次我加班晚睡,他都还在线工作。我发给他们组的所有技术讨论相关的邮件,他都在很短时间内回复并详细解答,而且解答都很中肯。总之,是我眼中纯技术的真大牛。

可能是因为我之前问过他编程马拉松打算做什么,所以他有了想法以后,就问我要不要一起做。他想做的什么呢?他有一个以前的环境警报 LED 灯,就是一个由电板控制的LED 设备,可以通过一些串行端口的编程,来让它在不同的情况下显示不同的颜色。

比如,如果 Airbnb 的网站挂了,就显示红色并不停闪动;如果现在某一个服务挂了,就显示橘色;如果某些页面的错误率很高,就显示紫色;一切正常就是绿色并且完全不闪动。介于红色和绿色之间的颜色以一个中间的频率闪动等等。

项目进行很顺利,除了技术细节没什么可写的。不过这次和牛人合作,我又有了一个不同的体会:就是不要害怕自己可能不如别人,就不敢出声或者不敢写代码。

刚开始我还比较小心,都是比较有把握的建议或意见才说出来。慢慢我发现,其实只要是自己真实的想法,说出来,有的时候可能别人真的就没有想到。

也许是个错误的意见,别人就可以告诉你为什么不对。以后再有类似的问题,就会有更多的了解和体会。所以,后面的两天,我们真的就是一边讨论一边做,在这个过程学了很多,更开心的是,觉得自己在这个项目中也是有真实贡献的。

经历了很多次编程马拉松,也就接触了很多类似 J 这样的极客,你看到这些技术大牛们在网路上从容不迫、侃侃而谈,是因为他们对技术和产品近乎执着的关心,因为他们日积月累了很多实战经验;更因为他们在背后付出了超出常人的努力。很庆幸自己身边有着很多很多这样的值得我学习和尊敬的极客们。

最后总结一下我对编程马拉松的感受:

  1. 编程马拉松是一项能够激发创意的活动,很多活动中的产品最终都成了成功产品的原型。
  2. 根据公司的实际情况举办编程马拉松,掌握好节奏。
  3. 编程马拉松不仅可以激发创意,还可以让你和团队的小伙伴建立特殊的感情和纽带,增加团队的凝聚力。
  4. 参加编程马拉松尽可能选择一些可以扩展你知识边界的项目,开阔视野。
  5. 与牛人结对编程,要敢于说出自己的真实想法,无论对错,都会有不同的收获。

最后,终于有机会说出我自己一直很喜欢的一句话:Geek is the new sexy! 用中文来说就是:会写代码的人真的就是很帅!

你经历过什么样的编程马拉松呢?可以在留言里说说。